import axios from 'axios'

const api = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response?.status === 401) {
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

// 认证相关API
export const authAPI = {
  login: (data) => api.post('/auth/login', data),
  register: (data) => api.post('/auth/register', data),
  logout: () => api.post('/auth/logout'),
  getCurrentUser: () => api.get('/auth/me')
}

// 图书相关API
export const bookAPI = {
  // 搜索图书（支持分页）
  searchBooks: (params) => api.get('/books', { params }),
  // 获取图书详情
  getBookById: (id) => api.get(`/books/${id}`),
  // 创建图书（管理员）
  createBook: (data) => api.post('/books', data),
  // 更新图书（管理员）
  updateBook: (id, data) => api.put(`/books/${id}`, data),
  // 删除图书（管理员）
  deleteBook: (id) => api.delete(`/books/${id}`),
  // 获取所有分类
  getCategories: () => api.get('/books/categories/list'),
  // 获取图书统计（管理员）
  getStatistics: () => api.get('/books/statistics'),
  // 批量删除图书（管理员）
  deleteBooksBatch: (bookIds) => api.delete('/books/batch', { data: { bookIds } }),
  // 批量更新图书（管理员）
  updateBooksBatch: (books) => api.put('/books/batch', { data: { books } })
}

// 借阅相关API
export const borrowAPI = {
  // 借阅图书
  borrowBook: (bookId) => api.post('/borrow/borrow', { book_id: bookId }),
  // 申请归还图书
  returnBook: (recordId) => api.post('/borrow/return', { record_id: recordId }),
  // 确认归还（管理员）
  confirmReturn: (recordId) => api.post('/borrow/confirm-return', { record_id: recordId }),
  // 查询当前借阅
  getCurrentBorrows: () => api.get('/borrow/current'),
  // 查询借阅记录
  getBorrowRecords: (params) => api.get('/borrow/records', { params }),
  // 新增借阅记录（管理员）
  addBorrowRecord: (data) => api.post('/borrow/add-record', data),
  // 获取借阅统计
  getBorrowStatistics: (params) => api.get('/borrow/statistics', { params })
}

// 用户相关API
export const userAPI = {
  // 获取用户个人信息
  getProfile: () => api.get('/users/profile'),
  // 更新用户个人信息
  updateProfile: (data) => api.put('/users/profile', data),
  // 修改密码
  changePassword: (data) => api.put('/users/password', data),
  // 注销账户
  deleteAccount: () => api.delete('/users/profile'),
  // 获取用户列表（管理员，支持分页）
  getUserList: (params) => api.get('/users', { params }),
  // 获取用户详情（管理员）
  getUserById: (id) => api.get(`/users/${id}`),
  // 修改用户角色（管理员）
  updateUserRole: (id, role) => api.put(`/users/${id}/role`, { role }),
  // 修改用户状态（管理员）
  updateUserStatus: (id, status) => api.put(`/users/${id}/status`, { status })
}

// 收藏相关API
export const favoriteAPI = {
  // 收藏图书
  addFavorite: (bookId) => api.post(`/books/${bookId}/favorite`),
  // 取消收藏
  removeFavorite: (bookId) => api.delete(`/books/favorites/${bookId}`),
  // 获取收藏列表
  getFavorites: () => api.get('/books/favorites'),
  // 检查是否已收藏
  checkFavorite: (bookId) => api.get(`/books/${bookId}/favorite`)
}

// 预约相关API
export const reservationAPI = {
  // 预约图书
  reserveBook: (bookId) => api.post(`/books/${bookId}/reserve`),
  // 获取预约列表
  getReservations: () => api.get('/books/reservations'),
  // 取消预约
  cancelReservation: (reservationId) => api.delete(`/books/reservations/${reservationId}`)
}

// 通知相关API
export const notificationAPI = {
  // 获取通知列表
  getNotifications: () => api.get('/notifications'),
  // 标记为已读
  markAsRead: (id) => api.put(`/notifications/${id}/read`),
  // 删除通知
  deleteNotification: (id) => api.delete(`/notifications/${id}`),
  // 获取未读通知数量
  getUnreadCount: () => api.get('/notifications/unread-count')
}

// 报表相关API
export const reportAPI = {
  // 导出图书列表（CSV）
  exportBooks: () => api.get('/reports/books', { responseType: 'blob' }),
  // 导出借阅记录（CSV）
  exportBorrowRecords: () => api.get('/reports/borrow', { responseType: 'blob' }),
  // 导出用户列表（CSV）
  exportUsers: () => api.get('/reports/users', { responseType: 'blob' })
}

export default api
